import { InjectionToken } from "@angular/core";
import { Observable } from "rxjs";

/**
 * ACL令牌
 */
export const NGW_ACL_TOKEN = new InjectionToken<AclService>(
  'NGW_ACL',
);

/**
 * 访问控制列表服务。
 */
export interface AclService {

  /**
   * 控制列表有变化的场合触发
   */
  onChange(): Observable<any>;

  /**
   * 追加权限。
   * 
   * @param perm 权限
   */
  addPermissions(perms: string[]): void;

  /**
   * 追加权限。
   * 
   * @param perm 权限
   */
  setPermissions(perms: string[]): void;

  /**
   * 是否有指定权限中的任意一个。
   *
   * @param {string} perms 指定的权限，可以是数组
   * @returns 是非值
   * @memberof AclService
   */
  hasPermissions(perms: string, data?: string): boolean;

  /**
   * 追加角色
   * @param role 角色
   */
  addRoles(roles: string[]): void;

  /**
   * 追加角色
   * @param role 角色
   */
  setRoles(roles: string[]): void;

  /**
   * 
   *
   * @param {boolean} isAdmin
   * @memberof AclService
   */
  setAdministrator(isAdmin: boolean): void;
}
